﻿Imports Clases
Public Class frmClientes
    Private clienteSeleccionado As Cliente 'cliente activo
    Private esNuevo As Boolean 'variable booleana para saber si es nuevo o no 
    ''' <summary>
    ''' Subprograma para cargar el comboBox con los clientes existentes
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub cargarCombo()
        cboClientes.Items.Clear()
        For i As Integer = 0 To misClientes.Personas.Count - 1
            If misClientes.Personas(i).GetType = GetType(Cliente) Then
                cboClientes.Items.Add(misClientes.Personas(i).Nombre)
            End If
        Next
    End Sub
    ''' <summary>
    ''' Al cargar el formulario 
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub frmClientes_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        esNuevo = True

        lbFuerza.BackColor = Color.Empty
        txtPass2.Enabled = True
        Me.Text = "Clientes - " & usuarioActivo.Nombre
        If misClientes.Personas.Count = 0 Then txtPass2.Enabled = True
        cargarCombo()
        AddHandler misClientes.PersonaIncorrecta, AddressOf miPersona_PersonaIncorrecta
        AddHandler misClientes.ContraseñaErroneaNula, AddressOf miPersona_ContraseñaNula
    End Sub

    ''' <summary>
    ''' Al cambiar en Cliente en el combo
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub cboClientes_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cboClientes.SelectedIndexChanged
        Me.ErrorProvider1.Clear()
        esNuevo = False
        txtPass2.Enabled = False
        If cboClientes.SelectedIndex <> -1 Then
            Dim nombreCliente As String
            nombreCliente = cboClientes.SelectedItem.ToString
            Dim cliente As New Cliente(nombreCliente, "12345678", "12345@123456", "1234567890123456789", "")
            'MessageBox.Show(misClientes.Personas.IndexOf(cliente))
            'Dim msg As String = ""
            'For i As Integer = 0 To misClientes.Personas.Count - 1
            '    msg &= misClientes.Personas(i).Nombre

            'Next
            'MessageBox.Show(msg)
            Dim index As Integer = misClientes.Personas.IndexOf(cliente)
            clienteSeleccionado = misClientes.Personas(index)
            txtNombre.Text = clienteSeleccionado.Nombre
            txtPass1.Text = clienteSeleccionado.Contraseña
            txtTarjeta.Text = clienteSeleccionado.TarjetaCredito
            txtCaducidad.Text = clienteSeleccionado.FechaCaducidad
            txtMail.Text = clienteSeleccionado.Email
            esNuevo = False
        End If
    End Sub
    ''' <summary>
    ''' Dejar el formulario sin datos.
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub limpiarForm()
        txtNombre.Text = ""
        txtCaducidad.Text = ""
        txtMail.Text = ""
        txtPass1.Text = ""
        txtPass2.Text = ""
        txtTarjeta.Text = ""
        lbFuerza.BackColor = Color.Empty

    End Sub
    ''' <summary>
    ''' Crear un nuevo cliente
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnNuevo_Click(sender As System.Object, e As System.EventArgs) Handles btnNuevo.Click
        txtPass2.Enabled = True
        limpiarForm()
        esNuevo = True
    End Sub

    ''' <summary>
    ''' Permitir sólo digitos
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub txtTarjeta_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtTarjeta.KeyPress
        Const NUM = "0123456789" & ControlChars.Back
        If Not NUM.Contains(e.KeyChar.ToString) Then
            e.KeyChar = ""
        End If
    End Sub
    ''' <summary>
    ''' Guardar o modificar un cliente
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnGuardar_Click(sender As System.Object, e As System.EventArgs) Handles btnGuardar.Click
        Me.ErrorProvider1.Clear()
        If txtNombre.Text = "" Then
            Me.ErrorProvider1.SetError(txtNombre, "Introduzaca un nombre")
        Else
            Me.ErrorProvider1.SetError(txtNombre, "")
        End If
        If txtPass1.Text = "" Then
            Me.ErrorProvider1.SetError(txtPass1, "Introduzca una contraseña")
        Else
            Me.ErrorProvider1.SetError(txtPass1, "")
        End If
        If txtPass2.Text = "" AndAlso esNuevo = True Then
            Me.ErrorProvider1.SetError(txtPass2, "Introduzca de nuevo una contraseña")
        Else
            Me.ErrorProvider1.SetError(txtPass2, "")
        End If
        If txtTarjeta.Text = "" Then
            Me.ErrorProvider1.SetError(txtTarjeta, "Introduzca un número de tarjeta de credito")
        Else
            Me.ErrorProvider1.SetError(txtTarjeta, "")
        End If
        If txtCaducidad.Text = "" Then
            Me.ErrorProvider1.SetError(txtCaducidad, "Introduzca una fecha de caducidad")
        Else
            Me.ErrorProvider1.SetError(txtCaducidad, "")
        End If
        If txtPass1.Text <> txtPass2.Text AndAlso esNuevo = True Then
            MessageBox.Show("Las contraseñas no coinciden, por favor vuelva a introducirlas", "ATENCIÓN")
            Exit Sub
        End If
        Dim men As String
        If txtNombre.Text <> "" AndAlso txtPass1.Text <> "" AndAlso txtMail.Text <> "" AndAlso txtTarjeta.Text <> "" AndAlso txtCaducidad.Text <> "" Then
            Dim nuevoCliente As New Cliente(txtNombre.Text, txtPass1.Text, txtMail.Text, txtTarjeta.Text, txtCaducidad.Text)
            If esNuevo Then
                men = misClientes.Añadir(nuevoCliente)
            Else
                men = misClientes.Modificar(nuevoCliente, cboClientes.SelectedItem.ToString)
            End If
            If men <> "" Then
                MessageBox.Show(men, "ATENCIÓN")
                Exit Sub
            Else
                If esNuevo Then
                    cboClientes.Items.Add(nuevoCliente.Nombre)
                Else

                    cargarCombo()
                    'cboClientes.Refresh()
                End If
            End If
            'MessageBox.Show(misClientes.Personas.IndexOf(nuevoCliente))
            'clienteSeleccionado = misClientes.Personas(misClientes.Personas.IndexOf(nuevoCliente))

        End If
    End Sub
    ''' <summary>
    ''' Sólo admite dígitos
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub txtPrecio_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtCaducidad.KeyPress
        Const NUM = "0123456789/" & ControlChars.Back
        If Not NUM.Contains(e.KeyChar.ToString) Then
            e.KeyChar = ""
        End If
    End Sub
    ''' <summary>
    ''' Evento en caso de que no se pueda agregar la persona
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub miPersona_PersonaIncorrecta(sender As Object, e As EventArgs)
        MessageBox.Show("Por favor revise todos los campos. No se puede registrar", "ATENCIÓN")
    End Sub
    ''' <summary>
    ''' Evento de contraseña incorrecta
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub miPersona_ContraseñaNula(sender As Object, e As EventArgs)
        Me.ErrorProvider1.SetError(txtPass1, "Introduzca una contraseña de mínimo 8 caracteres")
        Me.ErrorProvider1.SetError(txtPass2, "Introduzca una contraseña de mínimo 8 caracteres")
    End Sub
    ''' <summary>
    ''' Eliminar un cliente
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnEliminar_Click(sender As System.Object, e As System.EventArgs) Handles btnEliminar.Click
        If txtCaducidad.Text <> "" AndAlso txtMail.Text <> "" AndAlso txtNombre.Text <> "" AndAlso txtPass1.Text <> "" AndAlso txtTarjeta.Text <> "" Then
            Dim indice As Integer = misClientes.Personas.IndexOf(clienteSeleccionado)
            Dim men As String = misClientes.BorrarC(clienteSeleccionado.Nombre)
            If men <> "" Then
                MessageBox.Show(men)
            Else
                cargarCombo()
                limpiarForm()

            End If
        End If

    End Sub

    ''' <summary>
    ''' Cambiar color de txtPass
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub txtPass1_TextChanged(sender As Object, e As System.EventArgs) Handles txtPass1.TextChanged
        Dim myTxtBox As TextBox = TryCast(sender, TextBox)
        If myTxtBox.Text.Length < 8 Then
            lbFuerza.BackColor = Color.Red
        End If
        If myTxtBox.Text.Length >= 8 Then
            lbFuerza.BackColor = Color.Yellow
        End If
        If myTxtBox.Text <> myTxtBox.Text.ToLower Then
            lbFuerza.BackColor = Color.Green
        End If
    End Sub
End Class